#ifndef __A73A9FAB_3443_47b7_AD17_9372AAD346EB__
#define __A73A9FAB_3443_47b7_AD17_9372AAD346EB__

#include "../import/head.h"
#include "../tools/head.h"

#include "../dynamic/head.h"
#include "../thread/head.h"
#include "../socket/head.h"
#include "../misc/head.h"
#include "../heart/head.h"
#include "../time/head.h"
#include "../file/head.h"
#include "../sync/head.h"
#include "../crt/head.h"
#include "../select/head.h"
#include "../aio/head.h"
#include "../dir_monitor/head.h"
#include "../callback/head.h"
#include "../big_buf/head.h"
#include "../buf/head.h"
#include "../msg/head.h"

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

namespace xos
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 
    // xos class
    // 
    class xos_impl : public i_xos
    {
    public:
        xos_impl();
        ~xos_impl();

    protected:
        // 
        // dir monitor object pool
        // 
        dir_monitor_impl::POOL m_dir_monitor_pool;

        // 
        // dynamic
        // 
        dynamic_impl::POOL m_dynamic_pool;

        // 
        // thread
        // 
        thread_impl::POOL m_thread_pool;

        // 
        // socket
        // 
        tcp_impl::POOL m_tcp_pool;
        udp_impl::POOL m_udp_pool;

        // 
        // aio
        // 
        aio_impl::POOL m_aio_pool;
        select_impl::POOL m_select_pool;

        // 
        // misc
        // 
        misc_impl::POOL m_misc_pool;

        // 
        // time
        // 
        heart_acceptor::POOL m_acceptor_pool;
        heart_impl::POOL m_heart_pool;
        time_impl::POOL m_time_pool;

        // 
        // file path
        // 
        dir_impl::POOL m_path_pool;
        file_impl::POOL m_file_pool;

        // 
        // sync
        // 
        event_impl::POOL m_event_pool;
        mutex_impl::POOL m_mutex_pool;
        lock_impl::POOL m_lock_pool;

        // 
        // crt
        // 
        crt_impl::POOL m_crt_pool;

        // 
        // callback
        // 
        callback_impl::POOL m_callback_pool;

        // 
        // buf
        // 
        big_buf_impl::POOL m_big_buf_pool;
        buf_impl::POOL m_buf_pool;
        msg_impl::POOL m_msg_pool;

    protected:
        int term();

    public:
        // 
        // create xos object
        // 
        int create( enumXosObj enumType, void ** ppv );

        // 
        // release xso interface
        // 
        int release();
    };
} // xos

#endif // __A73A9FAB_3443_47b7_AD17_9372AAD346EB__
